class Solution {
  public:
    int n, m;
    bool vis[1005][1005] = {0};
   
    int solve(vector<vector<int> >& matrix) {
        n=matrix.size(),m=matrix[0].size();
        int ans=0;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                ans=max(ans,dfs(matrix,i,j));
            }
        }
        return ans;
    }
    int dx[4]={1,-1,0,0};
    int dy[4]={0,0,-1,1};

    int dfs(vector<vector<int> >& matrix,int i,int j)
    {
        vis[i][j]=true;
        int maxPath = 1;  // 至少包含当前节点
        for(int k=0;k<4;k++)
        {
            int x=i+dx[k];
            int y=j+dy[k];
            if(x>=0&&x<n&&y>=0&&y<m&&matrix[i][j]<matrix[x][y]&&!vis[x][y])
            {
                maxPath = max(maxPath, 1 + dfs(matrix, x, y));
            }
   
        }
        vis[i][j] = false;  // 回溯
        return maxPath;
    }
};